package com.jie.creator.singleton.demo05;

/**
 * @description:懒汉式:双重检查方式
 * @author: jie
 * @time: 2022/1/29 16:56
 */
public class Singleton {

    /**
     * @description:私有构造方法，避免外部创建对象
     */
    private Singleton() {}
    /**
     * @description:在成员位置创建该类的对象,当前只是声明了一个该类型的变量，并没有进行赋值
     */
    private static volatile Singleton instance;

    /**
     * @description:对外提供静态方法获取该对象
     */
    public static Singleton getInstance() {
		//第一次判断，如果instance的值不为null，不需要抢占锁，直接返回对象
        if(instance == null) {
            synchronized (Singleton.class) {
                //第二次判断，抢到锁之后再次判断是否为null
                if(instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}